<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 数组遍历方法（every和some）
        // arr.every(callback[, thisArg])
        // 参数1： callback
        // callback用来测试每个元素的函数，

        // 它可以接收三个参数：
        // element用于测试的当前值。
        // index可选用于测试的当前值的索引。
        // array可选调用 every 的当前数组。
        // 参数2： thisArg（ 可选）
        // 执行 callback 时使用的 this 值。

        // 返回值
        // 如果回调函数的每一次返回都为 truthy 值， 返回 true， 否则返回 false
        // 在 JavaScript 中， truthy（ 真值） 指的是在布尔值上下文中， 转换后的值为真的值。
        // 所有值都是真值， 除非它们被定义为 假值（ 即除 false、 0、 ""、
        // null、 undefined 和 NaN 以外皆为真值）。

        // 注意：● every 不会改变原数组。
        // ● 在调用 every 之后添加到数组中的元素不会被 callback 访问到。
        // ● 若传入一个空数组， 无论如何都会返回 true。
        // （ 这种情况属于无条件正确： 正因为一个空集合没有元素， 所以它其中的所有元素都符合给定的条件。)



        // 下例检测数组中的所有元素是否都大于 10。
        // function isBigEnough(element, index, array) {
        //     return element >= 10;
        // }
        // [12, 5, 8, 130, 44].every(isBigEnough); // false
        // [12, 54, 18, 130, 44].every(isBigEnough); // true



        // Array.prototype.some()

        // 语法：

        // arr.some(callback(element[, index[, array]])[, thisArg])

        // 参数1： callback
        // callback用来测试每个元素的函数，

        // 接受三个参数：
        // element数组中正在处理的元素。
        // index 可选数组中正在处理的元素的索引值。
        // array可选some() 被调用的数组。
        // 参数2： thisArg（ 可选）
        // 执行 callback 时使用的 this 值。

        // 返回值
        // 数组中有至少一个元素通过回调函数的测试就会返回true； 
        // 所有元素都没有通过回调函数的测试返回值才会为false。

        // 注意：● some() 被调用时不会改变数组。
        // ● 在调用 some() 后被添加到数组中的值不会被 callback 访问到。
        // ● 如果用一个空数组进行测试， 在任何情况下它返回的都是false。


        // 将任意值转换为布尔类型
        // var TRUTHY_VALUES = [true, 'true', 1];

        // function getBoolean(value) {
        //     'use strict';

        //     if (typeof value === 'string') {
        //         value = value.toLowerCase().trim();
        //     }

        //     return TRUTHY_VALUES.some(function(t) {
        //         return t === value;
        //     });
        // }
        // console.log(getBoolean(false),
        //     getBoolean('false'),
        //     getBoolean(1),
        //     getBoolean('true')
        // );
    </script>
</body>

</html>